import Vue from "vue"; // 引入 Vue 是因为要用到 Vue.extend() 这个方法
import Main from "./index.vue"; // 引入刚才的 toast 组件
 
let DialogConstructor = Vue.extend(Main); // 创建Vue对象


// 注：通过参数个数来判断是否为form表单自定义规则验证 rule, value, callback
const keysVerify = function (oValue) {
  var aMsg = [], list = [
    // 去除执行SQL语句的命令关键字
    'select', 'insert', 'update', 'delete', 'drop', 'truncate', 'declare', 'xp_cmdshell', '/add', 'net user',
    // 去除执行存储过程的命令关键字
    'exec', 'execute',
    // 去除系统存储过程或扩展存储过程关键字
    {key: 'xp_', right: false}, {key: 'sp_', right: false},
    // 防止16进制注入
    {key: '0x', right: false}
  ];

  if (typeof oValue != 'object') {
    oValue = {a: oValue};
  }

  var reg = null, regStr = '';
  for (var i = 0; i < list.length; i++) {
    var item = list[i];
    var key = typeof item != 'object' ? item : item.key;
    var left = typeof item != 'object' ? true : item.left === false ? false : true;
    var right = typeof item != 'object' ? true : item.right === false ? false : true;
    regStr = left ? '\\b' : '';
    regStr += key;
    regStr += right ? '\\b' : '';

    reg = new RegExp(regStr, 'i');

    for (var ss in oValue) {
      var value = oValue[ss];
      if (typeof value != 'object' && reg.test(value)) {
        aMsg.push(key);
      }
    }
  }
  // 表示报错
  if (aMsg.length) {
    showDialog(aMsg, list.map(item => {
      return typeof item != 'object' ? item : item.key;
    }));
    return true;
  } else {
    return false;
  }
}

function showDialog (aMsg, list) {
  var vm = new DialogConstructor(); //创建vm实例
  vm.aMsg = aMsg;
  vm.list = list;
  var instance = vm.$mount(); // 渲染组件
  document.body.appendChild(instance.$el); // 挂载到 body 下
  setTimeout(() => {
    vm.open();
  }, 20);
}

export default keysVerify;